// 导航守卫
import router from '@/router'
import store from '@/store/index'
const whitepage = ['/login', '/404']
// 导入进度条模块
// import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 引入清除上个页面的所有请求方法
import { cancleAll } from '@/utils/request'
// // 导航守卫思路
// 判断是否有token
//   如果有token 判断当前的路由是否是从login页面
//         当前跳转路由是login路由的话，跳转到首页
//         跳转的页面不是登录页面，继续执行next（）
//   没有token
//       判断要跳转过去的页面是否是白名单页面
//          是白名单页面继续执行下去next（）
//          不是白名单页面则退回去login路由
// 进度条开始
// Nprogress.start()
router.beforeEach(async(to, from, next) => {
  console.log('导航守卫', to)
  // 判断路由跳转时是否携带token
  if (store.state.user.token) {
    // 判断要登陆的页面是否是登录页
    if (to.path === '/login') {
      next('/')
    } else {
      // 当登录的不是登录页时，判断此时路由跳转下一个的时候判断此时是否有用户信息
      // 判断是否有用户信息
      if (store.state.user.userinfo.userId) {
        next()
      } else {
        await store.dispatch('user/getUserInfo')
        // addRouter()添加动态路由有一个缺点,当它第一次跳转路由不能马上使用,所以要再跳一次相同的路径时才能跳转到正确的页面上
        next(to.fullPath)
        // token失效在请求响应器里面判断
      }
    }
  } else {
    //   没有携带token，判断跳转的页面是否是白名单页面，
    // 如果是白名单页面（不需要携带token）的页面正常进入，如果不是白名单页面，退回到首页
    if (whitepage.includes(to.path)) {
      next()
    } else {
      next(`/login?redirect=${to.fullPath}`)
    }
  }
  // 进度条完成
  // Nprogress.done()
})
router.afterEach((to, next) => {
  // 进入其他页面后取消上一页面的所有请求
  cancleAll()
})
